package com.briup.day08;

import lombok.Data;

/**
 * 订单类
 */
// @Data注解能够帮助我们在类编译时，
// 给该类自动创建类所需的属性的get/set/toString等方法
@Data
public class Order {
    // 被static修饰的成员变量，成为了静态变量/类变量
    // 归属于类所有/所有的对象共有，当其中一个对象对其进行修改后，
    // 其他对象都会受到影响
    private static int no;
    // 订单的特征：订单编号
    private int orderId;
    // 订单的详情描述
    private String description;

    public Order() {
        this.setOrderId();
    }

    public Order(String description) {
        this();
        this.description = description;
    }

    // 让idea自动生成get/set方法，alt+insert唤出自动生成面板
   /* public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public int getOrderId() {
        return orderId;
    }*/

    private void setOrderId() {
        this.orderId = ++no;
    }

    // 当方法被static修饰后，那么该方法就变成了静态方法/类方法，
    // 是直接归属于类所有，能够直接被类调用，
    // 静态方法与对象没有关系，所以在静态方法内部是不能直接调用
    // 成员属性和成员方法，同时也不能使用this和super
    public static void mian() {
//        this.orderId = 100;
        // 通常在静态方法中不会编写与具体的某一个对象有关的代码，
        // 而是编写当前类所有对象都会用到的共性的代码；
        // 或者是专门为了解决某一个共性问题的工具方法，
        // 如Arrays类中的sort()、fill()方法
        System.out.println("这是Order类中的mian方法");
    }
}

class OrderTest {
    public static void main(String[] args) {
        Order order = new Order();
        System.out.println(order.getOrderId());
        Order order2 = new Order();
        System.out.println(order2.getOrderId());
        Order order3 = new Order();
        System.out.println(order3.getOrderId());
        // 可以直接使用类名调用其内部的静态方法
        Order.mian();
    }
}
